# test01_re.py
# - 统计每个客户端(browser, ip)访问服务器的次数
# - 将统计信息通过字典{k1:v1, k2:v2}的方式显示出来
# - 分别统计客户端是 Firefox 和 MSIE 的访问次数
# 1.按行读取文件(while True+readline/readlines)
# 2.使用search方法对数据进行正则匹配
# 3.如果匹配成功,获取到匹配对象,group获取到匹配的字符串
# 4.如果ip出现过，则修改访问次数+1
# 5.如果ip没出现过,将ip:1这组键值对添加到字典中
# fname: 路径   re_str: 正则字符串
import re
def count_cli(fname, re_str):
    c_dict = {}  # 统计字典
    re_obj = re.compile(re_str)  # 正则编译
    with open(fname, mode="r") as fr:
        for line in fr.readlines(): # line:每一行日志
            data = re_obj.search(line)
            if data != None:  # 匹配成功
                key = data.group()
                if key in c_dict.keys():
                    c_dict[key] += 1  # 更新
                else:
                    c_dict[key] = 1  # 添加
    return c_dict
if __name__ == '__main__':
    d1 = count_cli("/opt/web.log", "(\d+\.){3}\d+")
    print("ip:", d1)
    d2 = count_cli("/opt/web.log", "Firefox|MSIE")
    print("browser:", d2)







# vim /opt/web.log
# browser: Firefox|MSIE
# ip: 数字点{3}数字: (\d+\.){3}\d+
# 数字点     数字点    数字点   数字
# \d+\.     \d+\.    \d+\.   \d+
# 192.      168.     1.      100   Firefox
# 1.        2.       3.      4     MSIE
# 192.      168.     1.      100   MSIE
# 12.       23.      34.     56    Firefox







